package cn.woniu.ecommerceplatform.service;

import cn.woniu.ecommerceplatform.entity.Address;
import cn.woniu.ecommerceplatform.entity.Customer;
import cn.woniu.ecommerceplatform.entity.Orders;
import cn.woniu.ecommerceplatform.util.ResponseResult;


public interface CustomerService {
    /**
     * 查询会员列表, 模糊查询关键字电话号码, 昵称, 等级.
     * 有分页功能.
     * 有排序功能: 根据会员消费次数排序, 根据会员消费金额排序,根据开卡时间排序. 默认按照开卡时间排序
     * @param phone
     * @param name
     * @param level
     * @param pageNo
     * @param pageSize
     * @param orderBy 排序方式. "T" 按照开卡时间排序; "N" 按照会员消费次数排序;"M" 按照会员消费金额排序
     * @return
     */
    ResponseResult<?> queryCustomList(String phone,String name,String level,Integer pageNo,Integer pageSize,Integer pageCount,String orderBy);

    /**
     * 新增会员
     */
    ResponseResult<?> insertCustomer(Customer customer);

    /**
     * 修改会员信息:修改昵称,修改等级,修改电话,修改备注
     * @param customer
     * @return
     */
    ResponseResult<?> updateCustomer(Customer customer);

    /**
     * 删除会员信息,通过id
     * @param id
     * @return
     */
    ResponseResult<?> deleteCustomer(Integer id);

    /**
     * 查询黑名单, 模糊查询,电话,昵称
     * @param phone
     * @param name
     * @param pageNo
     * @param pageSize
     * @return
     */
    ResponseResult<?> queryBlackList(String phone,String name,Integer pageNo,Integer pageSize);

    /**
     * 移出黑名单
     * @param account
     * @return
     */
    ResponseResult<?> removeBlackList(String account);

    /**
     * 移入黑名单
     * @param account
     * @return
     */
    ResponseResult<?> insertBlackList(String account);

    /**
     * 根据account查询会员信息
     */
    ResponseResult<?> selectByAccount(String account);

    /**
     *  结算积分兑换商品的功能,第一步结算, 第二步生成订单,开启事务
     *  结算积分要先查询积分余额, 与商品的积分进行对比
     * @return
     */
    ResponseResult<?> countPoint(Address address, Orders orders,Integer pointNeed);



    /**
     * 注册验证account是否唯一
     * @param account
     * @return
     */
    ResponseResult<?> queryAccount(String account);

    /**
     * 注册新增
     * @param customer
     * @return
     */
    ResponseResult<?> insertRegister(String name,String phone,String account,String password);

    /**
     * 通过账号查询id
     * @param account
     * @return
     */
    ResponseResult<?> queryIdByAccount(String account);

    ResponseResult<?> addPoint(String account,Double actualPay);

    /**
     * 会员查询自己的可显示信息
     * @param account
     * @return
     */
    ResponseResult<?> selectMyself(String account);

    /**
     * 会员通过id修改自己的信息
     * @param customer
     * @return
     */
    ResponseResult<?> updateCustomByAccountMy(Customer customer);
}
